package com.qire.other.advert;

import android.content.Context;
import android.view.View;

/**
 * 广告视图绑定器（AdvertViewBinder）  更名为 => 广告对接器(广告停靠坞-AdvertDockingDevice)
 * 设计这个绑定器，事为了给预加载广告等特殊需求提供一个延时设置的容器。
 * 最初用来完成广告与插入视图的关联，但是扩展位提供移除的功能，固改名对接器。
 * <p>提供一下能力:</p>
 * <pre>
 *  1.设备上下文的引用，用于第三方广告SDK构建广告申请实例
 *  2.安装一个 advertView 到对接器（具体是立即安装到广告容器里还是在未来安装如何完成由实现定义）
 *  3.清除广告对接器（包括广告视图容器）中的相关 advertView 用来避免一些问题，如安装新的 advertView 前确保旧的被回收，或是广告展示完毕在需要回收的时候回收。
 *  等等...
 * </pre>
 * 通过广告 SDK 可以得到一个 advertView ，再渲染时会调用 insert 行为，这里可以完成 advertView 的插入，也可以将 advertView 保存下来，等待特殊时期使用。
 */
public interface AdvertDockingDevice {

    /**
     * 提供一个使用广告的页面上下文，如果有的话，它会使用在广告SDK请求广告实体时。
     * @return app上下文。
     */
    Context getContext();

    /**
     * 广告sdk请求到广告后，并构建了 advertView 渲染时会调用这个用来执行具体接入到页面预留的广告位置。
     * 我们可以使用一个layout布局来作为显示这个广告的容器，并 addView 这个对象，当然你也可以保存以便后续使用。
     * @param advertView
     */
    void insert(View advertView);

    /**
     * 从对接器里移除指定的 advertView，相关的关联，以确保没有持有避免造成意外情况
     * @param advertView
     */
    void remove(View advertView);

    /**
     * 移除所有广告对接起所有的 advertView。如果存在容器布局，也应该清除容器布局所有的子View。
     */
    void removeAll();

    /**
     * 销毁方法，回收资源。
     */
    void destroy();

}
